package br.usp.ime.AUN;

import java.util.List;

public class MateriaMgr {
	MateriaDAO materiaDAO;
	
	public MateriaMgr() {
		this.materiaDAO = new MateriaDAO();
	}
	
	/*
	 * Inicializa o banco copiando as mensagens do banco da AUN e calculando as semelhanças
	 */
	
	public String incializaBanco(boolean copiarAUN){
		if (copiarAUN){
			this.materiaDAO.copiaDoBancoDaAUN();
			List<Materia> materias = this.materiaDAO.listAll();
			for (Materia materia : materias)
				procuraSimilares(materia, materias);
		} 
		return this.imprimeTodosTitulos();
	}
	
	/*
	 * Busca em todas materias do banco as 5 mais semelhantes a materia passada como parametro
	 */
	public void procuraSimilares(Materia materia,List<Materia> materias){
		for (Materia mat: materias)
			materia.verificaEAdicionaSimilar(mat);
		
		System.out.println("essa materia ja foi "+ materia.getId());
		this.materiaDAO.save(materia);
	}
	
	/*
	 * Faz uma busca de materias semelhantes ao termo passado como parametro e 
	 * retorna uma string com a lista impressa em HTML
	 */
	public String imprimeBusca(String termo){
		List<Materia> materias = materiaDAO.buscarNoticias(termo);
		String paraRetornar = "";
		if (materias.size() == 0)
			paraRetornar += "<h2>Nenhuma materia encontrada com esse termo!</h2>";
		else{
			paraRetornar += "<h2>Foram encontradas "+materias.size()+" materias.</h2>";
			for (Materia materia: materias)
				paraRetornar += materia.imprimeHTML();
		}
		return paraRetornar;
	}

	/*
	 * Faz uma busca de materias por id e retorna uma string com a materia impressa em HTML
	 */
	public String imprimeMateria(String id){
		try {
			Materia materia = materiaDAO.findById(Long.parseLong(id));
			if (materia != null)
				return materia.imprimeHTML();
			return "<h1>A materia com id "+id+" não existe!</h1>";
		} catch (Exception e) {
			return "<h1>Id invalido!</h1>";
		}
	}
	
	/*
	 * Busca no banco as n materias 
	 */
	public String imprimeMaterias(int numeroMateiras){
		List<Materia> materias = materiaDAO.listAll();
		String paraRetornar = "";
		if (materias.size() == 0)
			paraRetornar += "<h2>Nenhuma materia encontrada no banco!</h2>";
		else{
			paraRetornar += "<h2>O total de Materias no banco é de "+this.materiaDAO.listAll().size()+"</h2>";
			for (int i = 0; i < numeroMateiras; i++) {
				int aleatorio = (int)((materias.size())*Math.random());
				paraRetornar += materias.get(aleatorio).imprimeHTML();
			}
		}
		return paraRetornar;
	}
	
	/*
	 * Busca no banco todas materias 
	 */
	public String imprimeTodasMaterias(){
		List<Materia> materias = materiaDAO.listAll();
		String paraRetornar = "";
		if ( materias.size() == 0 )
			paraRetornar += "<h2>Nenhuma materia encontrada no banco!</h2>";
		else{
			paraRetornar += "<h2>O total de Materias no banco é de "+materias.size()+"</h2>";
			for (int i = 0; i < materias.size(); i++)
				paraRetornar += materias.get(i).imprimeHTML();
		}
		return paraRetornar;
	}
	
	/*
	 * Busca no banco todas materias 
	 */
	public String imprimeTodosTitulos(){
		List<Materia> materias = materiaDAO.listAll();
		String paraRetornar = "";
		if (materias.size() == 0)
			paraRetornar += "<h2>Nenhuma materia encontrada no banco!</h2>";
		else{
			paraRetornar += "<h2>O total de Materias no banco é de "+materias.size()+"</h2>";
			for (int i = 0; i < materias.size(); i++) {
				paraRetornar += "<a href=\"materia.jsp?id="+materias.get(i).getId()+"\">";
				paraRetornar += materias.get(i).getId()+" - "+ materias.get(i).getTitulo();
				paraRetornar += "</a>   <br/>";
			}
		}
		return paraRetornar;
	}
}